import { ADD_PERSON } from "../constant";

const initState = [
    {id: '001', name: 'Tom', age: 18}
]
export default function personReducer(preState=initState, action) {
    const {type, data} = action
    // console.log("fdadfcz")
    switch (type) {
        case ADD_PERSON: 
            // 为什么不使用array.unshift(新元素)
            // 因为在react底层，对返回的变量为引用，如果引用相同，则页面不更新
            // preState.unshift(data) 不能这么写，这样导致perState被改写，personReducer就不是一个纯函数
            return [data, ...preState]
        default:
            return preState;
    }
}

/*

纯函数：
    任何时候，同样的输入（实参），必定得到同样的输出（返回）

    约束：
    （1）不得更改参数数据
    （2）不会产生任何副作用，例如网络请求、输入和输出设备
    （3）不能调用Date.now()或者Math.random()等不纯的方法

    redux的reducer函数必须是一个纯函数

*/